#ifndef FOC_CONTROLLER_H
#define FOC_CONTROLLER_H

#include <cmath>

class FOCController {

public:
    // 构造函数
    FOCController();

    // 更新电机角度（由编码器或传感器提供）
    void updateAngle(float angle);

    // 执行FOC算法核心部分（电流变换）
    void execute(float iu, float iv);

    // 执行反Park变换（通常用于电压矢量变换）
    void executeInverseTransform(float vd, float vq);

    // 获取变换结果
    float getIu() const;
    float getIv() const;
    float getIw() const;

    float getIalpha() const;
    float getIbeta() const;

    float getId() const;
    float getIq() const;

    float getValpha() const;
    float getVbeta() const;

    float getElectricalAngle() const;

private:
    // Clarke变换 (abc -> αβ)
    void clarkeTransform();

    // Park变换 (αβ -> dq)
    void parkTransform();

    // 反Park变换 (dq -> αβ)
    void inverseParkTransform();

private:
    // 电流值
    float iu, iv, iw;            // 三相电流
    float ialpha, ibeta;        // Clarke变换结果
    float id, iq;               // Park变换结果

    // 电压值
    float vd, vq;               // dq轴电压
    float valpha, vbeta;        // 反Park变换结果

    // 角度相关
    float electricalAngle;      // 电角度
    float sinTheta, cosTheta;   // 角度的正弦和余弦值
};

#endif // FOC_CONTROLLER_H